home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / asm-generic / bitops.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  82 lines

  1. #ifndef _ASM_GENERIC_BITOPS_H_
  2. #define _ASM_GENERIC_BITOPS_H_
  3.  
  4. /*
  5.  * For the benefit of those who are trying to port Linux to another
  6.  * architecture, here are some C-language equivalents.  You should
  7.  * recode these in the native assembly language, if at all possible.
  8.  * To guarantee atomicity, these routines call cli() and sti() to
  9.  * disable interrupts while they operate.  (You have to provide inline
  10.  * routines to cli() and sti().)
  11.  *
  12.  * Also note, these routines assume that you have 32 bit longs.
  13.  * You will have to change this if you are trying to port Linux to the
  14.  * Alpha architecture or to a Cray.  :-)
  15.  * 
  16.  * C language equivalents written by Theodore Ts'o, 9/26/92
  17.  */
  18.  
  19. extern __inline__ int set_bit(int nr,long * addr)
  20. {
  21.     int    mask, retval;
  22.  
  23.     addr += nr >> 5;
  24.     mask = 1 << (nr & 0x1f);
  25.     cli();
  26.     retval = (mask & *addr) != 0;
  27.     *addr |= mask;
  28.     sti();
  29.     return retval;
  30. }
  31.  
  32. extern __inline__ int clear_bit(int nr, long * addr)
  33. {
  34.     int    mask, retval;
  35.  
  36.     addr += nr >> 5;
  37.     mask = 1 << (nr & 0x1f);
  38.     cli();
  39.     retval = (mask & *addr) != 0;
  40.     *addr &= ~mask;
  41.     sti();
  42.     return retval;
  43. }
  44.  
  45. extern __inline__ int test_bit(int nr, const unsigned long * addr)
  46. {
  47.     int    mask;
  48.  
  49.     addr += nr >> 5;
  50.     mask = 1 << (nr & 0x1f);
  51.     return ((mask & *addr) != 0);
  52. }
  53.  
  54. /*
  55.  * fls: find last bit set.
  56.  */
  57.  
  58. #define fls(x) generic_fls(x)
  59.  
  60. #ifdef __KERNEL__
  61.  
  62. /*
  63.  * ffs: find first bit set. This is defined the same way as
  64.  * the libc and compiler builtin ffs routines, therefore
  65.  * differs in spirit from the above ffz (man ffs).
  66.  */
  67.  
  68. #define ffs(x) generic_ffs(x)
  69.  
  70. /*
  71.  * hweightN: returns the hamming weight (i.e. the number
  72.  * of bits set) of a N-bit word
  73.  */
  74.  
  75. #define hweight32(x) generic_hweight32(x)
  76. #define hweight16(x) generic_hweight16(x)
  77. #define hweight8(x) generic_hweight8(x)
  78.  
  79. #endif /* __KERNEL__ */
  80.  
  81. #endif /* _ASM_GENERIC_BITOPS_H */
  82.